package controllers;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;

import models.Forum;
import models.Topico;
import models.Usuario;
import play.db.DB;
import play.mvc.Controller;

public class Foruns extends Controller {
	
	public static void cadastrarForum(String tema, Integer idUsuario) throws SQLException{
		
		boolean rs = false;
		Connection con = null;
		Statement s = null;
		
		if(idUsuario.equals(null)){
			flash.error("Error: Usuario não cadastrado no sistema.");
			Application.index();
		}
		
		List<Forum> listaForum = new ArrayList<Forum>();
		
		con = DB.getConnection();
		String sql = "INSERT INTO forum(tema, id_usuario) VALUES (" + " '" + tema + "' " + ", " + idUsuario + ");";
		
		try {
			s = con.createStatement();
			rs = s.execute(sql); // execute usado para insert
				
			}catch (SQLException sqlex) {
				sqlex.printStackTrace();
			} finally {
				if (rs == true)
					; // não faz nada, apenas para remover warning
				if (s != null)
					s.close();
				if (con != null)
					con.close();
			}
		
		flash.success("Forum cadastrado com sucesso.");
		forum();
		
		
	}
	
	public static void forum() throws SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		List<Forum> listaForuns = new ArrayList<Forum>();
		con = DB.getConnection();
		String sql = "SELECT * FROM forum WHERE 1=1;";
		
		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);
			while (rs.next()) {
				Forum forum = new Forum();
				forum.setId_forum(rs.getLong("id_forum"));
				forum.setTema(rs.getString("tema"));
				
				Usuario usuario = new Usuario();
				usuario = buscaUsuarioById(rs.getInt("id_usuario"));
				
				forum.setUsuario(usuario);
				
				listaForuns.add(forum);
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close(); // usado quando o rs for do tipo ResultSet
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}
		
		render(listaForuns);
		
	}
	
	public static Usuario buscaUsuarioById(int idUsuario) throws SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		Usuario usuario = new Usuario();
		con = DB.getConnection();
		String sql = "SELECT * FROM usuario WHERE id = "+ idUsuario +";";
		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);
			
			while (rs.next()) {
				usuario.setId(rs.getLong("id"));
				usuario.setNome(rs.getString("nome"));
				usuario.setSobrenome(rs.getString("sobrenome"));
				usuario.setSenha(rs.getString("senha"));
				usuario.setEmail(rs.getString("email"));
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close();
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}
		
		return(usuario);
	}
	
	public static Forum buscaForumById(int idForum) throws SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		Forum forum = new Forum();
		con = DB.getConnection();
		String sql = "SELECT * FROM forum WHERE id_forum = "+ idForum +";";
		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);
			
			while (rs.next()) {
				forum.setId_forum(rs.getLong("id_Forum"));
				forum.setTema(rs.getString("tema"));
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close();
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}
		
		return(forum);
	}
	
	public static Topico buscaTopicoById(int idTopico) throws SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		Topico topico = new Topico();
		con = DB.getConnection();
		String sql = "SELECT * FROM topico WHERE id_topico = "+ idTopico +";";
		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);
			
			while (rs.next()) {
				topico.setId_topico(rs.getLong("id_topico"));
				topico.setDataCriacao(rs.getDate("data_criacao"));
				topico.setTitulo(rs.getString("titulo"));
				
				Usuario usuario = new Usuario();
				usuario = buscaUsuarioById(rs.getInt("id_usuario"));
				
				Forum forum = new Forum();
				forum = buscaForumById(rs.getInt("id_forum"));
				
				topico.setAutor(usuario);
				topico.setForum(forum);
				
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close();
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}
		
		return(topico);
		
	}
	
	public static void topicos(Long id_forum) throws SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		
		List<Topico> listaTopicos = new ArrayList<Topico>();
		con = DB.getConnection();
		
		String sql = "SELECT id_topico, titulo, data_criacao, id_forum, id_usuario FROM topico WHERE id_forum = "+ id_forum +";";
		
		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);
			
			while (rs.next()) {
				Topico topico = new Topico();
				topico.setId_topico(rs.getLong("id_topico"));
				topico.setTitulo(rs.getString("titulo"));
				topico.setDataCriacao(rs.getDate("data_criacao"));
				
				Forum forum = new Forum();
				forum = buscaForumById(rs.getInt("id_forum"));
				
				Usuario usuario = new Usuario();
				usuario = buscaUsuarioById(rs.getInt("id_usuario"));
				
				topico.setForum(forum);
				topico.setAutor(usuario);
				
				listaTopicos.add(topico);
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close(); // usado quando o rs for do tipo ResultSet
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}
		
		session.put("idForum", id_forum);
		render(listaTopicos);
	}
	
	public static void cadastrarTopico(String titulo, Integer idUsuario, Long idForum) throws SQLException{
		
		boolean rs = false;
		Connection con = null;
		Statement s = null;
		
		if(idUsuario.equals(null)){
			flash.error("Error: Usuario não cadastrado no sistema.");
			Application.index();
		}
		
		if(idForum.equals(null)){
			flash.error("Error: Forum não cadastrado no sistema.");
			Application.index();
		}
		
		List<Forum> listaForum = new ArrayList<Forum>();
		
		con = DB.getConnection();
		String sql = "INSERT INTO topico (titulo, id_usuario, id_forum, data_criacao) VALUES (" 
				+ " '" + titulo + "' " + ", " + idUsuario + " , " + idForum + " , NOW() );";
		
		try {
			s = con.createStatement();
			rs = s.execute(sql);
				
			}catch (SQLException sqlex) {
				sqlex.printStackTrace();
			} finally {
				if (rs == true)
					;
				if (s != null)
					s.close();
				if (con != null)
					con.close();
			}
		
		flash.success("Topico cadastrado com sucesso.");
		session.remove("idForum");
		
		topicos(idForum);
	}
	
/*	public static void post(Long id_topico) throws SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		
		List<Topico> listaTopicos = new ArrayList<Topico>();
		con = DB.getConnection();
		
		String sql = "SELECT id_post, data_post, id_usuario, id_topico, comentario FROM post WHERE id_topico = "+ id_topico +";";
		
		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);
			
			while (rs.next()) {
				Post post = new Post();
				topico.setId_topico(rs.getLong("id_topico"));
				topico.setTitulo(rs.getString("titulo"));
				topico.setDataCriacao(rs.getDate("data_criacao"));
				
				Forum forum = new Forum();
				forum = buscaForumById(rs.getInt("id_forum"));
				
				Usuario usuario = new Usuario();
				usuario = buscaUsuarioById(rs.getInt("id_usuario"));
				
				topico.setForum(forum);
				topico.setAutor(usuario);
				
				listaTopicos.add(topico);
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close(); // usado quando o rs for do tipo ResultSet
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}
		
		session.put("idForum", id_forum);
		render(listaTopicos);
	}*/


}
		
	
